(*
   Copyright (C) 2024 International Digital Economy Academy.
   This program is licensed under the MoonBit Public Source
   License as published by the International Digital Economy Academy,
   either version 1 of the License, or (at your option) any later
   version. This program is distributed in the hope that it will be
   useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MoonBit
   Public Source License for more details. You should have received a
   copy of the MoonBit Public Source License along with this program. If
   not, see
   <https://www.moonbitlang.com/licenses/moonbit-public-source-license-v1>.
*)


let __sedlex_table_3 =
  "\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002"

let __sedlex_table_9 =
  "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\000\000\000\000\001\000\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"

let __sedlex_table_28 = "\001\001\001\001\001\001\001\001\001\001\000\001\001"

let __sedlex_table_35 =
  "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\002\002\002"

let __sedlex_table_7 =
  "\001\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"

let __sedlex_table_39 =
  "\001\001\001\001\001\001\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\002"

let __sedlex_table_42 =
  "\001\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"

let __sedlex_table_21 =
  "\001\001\001\001\001\001\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"

let __sedlex_table_22 =
  "\001\002\002\002\002\002\002\002\002\002\002\000\000\000\000\000\000\000\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\000\000\000\000\002\000\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002"

let __sedlex_table_23 =
  "\001\000\002\002\002\002\002\002\002\002\002\002\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\003"

let __sedlex_table_16 = "\001\002"

let __sedlex_table_38 =
  "\001\000\002\002\002\002\002\002\002\002\002\002\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\004\000\004\005\000\000\000\000\000\006\000\000\007\000\000\000\000\000\000\002\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\007"

let __sedlex_table_43 =
  "\001\000\002\002\002\002\002\002\002\002\002\002\000\000\000\000\000\000\000\002\002\002\002\002\002\000\000\000\000\000\003\000\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\002\002\002\002\002\002"

let __sedlex_table_6 =
  "\001\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002"

let __sedlex_table_24 =
  "\001\000\000\000\000\000\000\000\000\000\000\000\000\000\002\003"

let __sedlex_table_19 =
  "\001\001\001\001\001\001\001\001\001\001\000\000\000\000\000\000\000\001\001\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\001\001\001\001"

let __sedlex_table_29 =
  "\001\000\001\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\001\003\000\000\001\000\001\000\000\000\004"

let __sedlex_table_1 =
  "\001\000\001\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\001\002\000\000\001\000\001\003\000\000\004"

let __sedlex_table_4 =
  "\001\000\002\002\002\002\002\002\002\002\002\002\000\000\000\000\000\000\000\002\002\002\002\002\002\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\002\002\002\002\002\000\000\000\000\000\000\000\000\000\003"

let __sedlex_table_18 = "\001\000\002\002\002\002\002\002\002\002\002\002"

let __sedlex_table_31 =
  "\001\002\002\002\002\002\002\002\002\002\002\003\002\002\003\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\003"

let __sedlex_table_8 =
  "\001\000\002\002\002\002\002\002\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002"

let __sedlex_table_26 =
  "\001\000\002\002\002\002\002\002\002\002\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002"

let __sedlex_table_25 =
  "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\002\002\002\002\002\002\002\002\002\001\001\001\001\001\001\001\002\002\002\002\002\002\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\002\002\002\002\002"

let __sedlex_table_14 =
  "\001\001\001\001\001\001\001\001\001\001\000\001\001\000\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002"

let __sedlex_table_15 =
  "\001\000\001\000\000\002\002\002\002\002\002\002\002\002\002"

let __sedlex_table_34 =
  "\001\001\001\001\001\001\001\001\001\001\000\001\001\000\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\002\002\002\002\002\002\002\002\002\001\001\001\001\001\001\001\002\002\002\002\002\002\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\002\002\002\002\002\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\003"

let __sedlex_table_10 = "\001\000\000\000\000\002"

let __sedlex_table_12 =
  "\001\002\002\002\002\002\002\002\002\002\003\004\003\003\005\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\003\006\007\b\t\n\
   \011\012\r\014\015\016\017\018\019\020\021\022\022\022\022\022\022\022\022\022\023\024\025\026\027\028\029\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\030\002\031 \
   \002\002\002!\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\"#$\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\003\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\003\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002"

let __sedlex_table_36 =
  "\001\002\002\002\002\002\002\002\002\002\003\004\003\003\004\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\003\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\005\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\003\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\003\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002"

let __sedlex_table_13 =
  "\001\002\002\002\002\002\002\002\002\002\002\003\002\002\003\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\004\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\005\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002"

let __sedlex_table_30 =
  "\001\000\000\000\000\000\000\000\000\000\000\000\000\000\002"

let __sedlex_table_41 =
  "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001"

let __sedlex_table_32 =
  "\001\001\001\001\001\001\001\001\001\001\000\001\001\000\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\000\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002"

let __sedlex_table_20 =
  "\001\001\001\001\001\001\001\001\001\001\000\000\000\000\000\000\000\001\001\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002"

let __sedlex_table_2 =
  "\001\001\001\001\001\001\001\001\001\001\000\000\000\000\000\000\000\001\001\001\001\001\001\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\001\001\001\001\001\000\000\000\000\000\000\000\000\000\002"

let __sedlex_table_5 =
  "\001\002\002\002\002\002\002\002\002\002\002\003\002\002\003\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\004\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\002\005"

let __sedlex_table_37 =
  "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\000\000\000\000\000\000\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\000\002"

let __sedlex_table_11 =
  "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\002\002\002\002\002\002\002"

let __sedlex_table_27 =
  "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\001\002\001\001\001\001\002\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\001\001\001\001\001\002\001\001\001\001\001\001\001\001\001\001\001\002\003\001\001\002\001\002\001\001\001\004"

let __sedlex_table_33 =
  "\001\001\001\001\001\001\001\001\001\001\000\000\000\000\000\000\000\001\001\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002"

let __sedlex_table_40 =
  "\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002"

let __sedlex_table_17 =
  "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\001\002\001\001\001\001\002\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\001\001\001\001\001\002\001\001\001\001\001\001\001\001\001\001\001\002\003\001\001\002\001\002\004\001\001\005\001\001\006"

let __sedlex_partition_28 c =
  let open! Stdlib in
  if c <= 31 then -1
  else if c <= 120 then
    Char.code (String.unsafe_get __sedlex_table_1 (c - 32)) - 1
  else -1

let __sedlex_partition_50 c =
  let open! Stdlib in
  if c <= 47 then -1
  else if c <= 112 then
    Char.code (String.unsafe_get __sedlex_table_2 (c - 48)) - 1
  else -1

let __sedlex_partition_58 c =
  let open! Stdlib in
  if c <= 61 then -1
  else if c <= 124 then
    Char.code (String.unsafe_get __sedlex_table_3 (c - 62)) - 1
  else -1

let __sedlex_partition_43 c =
  let open! Stdlib in
  if c <= 45 then -1 else if c <= 46 then 0 else -1

let __sedlex_partition_49 c =
  let open! Stdlib in
  if c <= 45 then -1
  else if c <= 112 then
    Char.code (String.unsafe_get __sedlex_table_4 (c - 46)) - 1
  else -1

let __sedlex_partition_12 c =
  let open! Stdlib in
  if c <= 92 then Char.code (String.unsafe_get __sedlex_table_5 (c - -1)) - 1
  else 1

let __sedlex_partition_29 c =
  let open! Stdlib in
  if c <= 47 then -1 else if c <= 51 then 0 else -1

let __sedlex_partition_46 c =
  let open! Stdlib in
  if c <= 45 then -1
  else if c <= 95 then
    Char.code (String.unsafe_get __sedlex_table_6 (c - 46)) - 1
  else -1

let __sedlex_partition_17 c =
  let open! Stdlib in
  if c <= 8 then -1
  else if c <= 5760 then
    Char.code (String.unsafe_get __sedlex_table_7 (c - 9)) - 1
  else if c <= 8191 then -1
  else if c <= 65279 then
    if c <= 12288 then
      if c <= 8239 then if c <= 8202 then 0 else if c <= 8238 then -1 else 0
      else if c <= 8286 then -1
      else if c <= 8287 then 0
      else if c <= 12287 then -1
      else 0
    else if c <= 65278 then -1
    else 0
  else -1

let __sedlex_partition_45 c =
  let open! Stdlib in
  if c <= 47 then -1 else if c <= 49 then 0 else -1

let __sedlex_partition_47 c =
  let open! Stdlib in
  if c <= 45 then -1
  else if c <= 95 then
    Char.code (String.unsafe_get __sedlex_table_8 (c - 46)) - 1
  else -1

let __sedlex_partition_53 c =
  let open! Stdlib in
  if c <= 64 then -1
  else if c <= 122 then
    Char.code (String.unsafe_get __sedlex_table_9 (c - 65)) - 1
  else -1

let __sedlex_partition_21 c =
  let open! Stdlib in
  if c <= 60 then -1 else if c <= 61 then 0 else -1

let __sedlex_partition_55 c =
  let open! Stdlib in
  if c <= 33 then -1
  else if c <= 39 then
    Char.code (String.unsafe_get __sedlex_table_10 (c - 34)) - 1
  else -1

let __sedlex_partition_5 c =
  let open! Stdlib in
  if c <= -1 then -1
  else if c <= 55 then Char.code (String.unsafe_get __sedlex_table_11 c) - 1
  else 0

let __sedlex_partition_19 c =
  let open! Stdlib in
  if c <= 8191 then Char.code (String.unsafe_get __sedlex_table_12 (c - -1)) - 1
  else if c <= 12287 then
    if c <= 8238 then
      if c <= 8231 then if c <= 8202 then 2 else 1
      else if c <= 8233 then 3
      else 1
    else if c <= 8286 then if c <= 8239 then 2 else 1
    else if c <= 8287 then 2
    else 1
  else if c <= 65278 then if c <= 12288 then 2 else 1
  else if c <= 65279 then 2
  else 1

let __sedlex_partition_1 c =
  let open! Stdlib in
  if c <= 127 then Char.code (String.unsafe_get __sedlex_table_13 (c - -1)) - 1
  else 5

let __sedlex_partition_16 c =
  let open! Stdlib in
  if c <= -1 then -1
  else if c <= 125 then Char.code (String.unsafe_get __sedlex_table_14 c) - 1
  else 0

let __sedlex_partition_35 c =
  let open! Stdlib in
  if c <= 47 then -1 else if c <= 57 then 0 else -1

let __sedlex_partition_40 c =
  let open! Stdlib in
  if c <= 42 then -1
  else if c <= 57 then
    Char.code (String.unsafe_get __sedlex_table_15 (c - 43)) - 1
  else -1

let __sedlex_partition_52 c =
  let open! Stdlib in
  if c <= 59 then -1
  else if c <= 61 then
    Char.code (String.unsafe_get __sedlex_table_16 (c - 60)) - 1
  else -1

let __sedlex_partition_13 c =
  let open! Stdlib in
  if c <= -1 then -1
  else if c <= 123 then Char.code (String.unsafe_get __sedlex_table_17 c) - 1
  else 0

let __sedlex_partition_33 c =
  let open! Stdlib in
  if c <= 45 then -1
  else if c <= 57 then
    Char.code (String.unsafe_get __sedlex_table_18 (c - 46)) - 1
  else -1

let __sedlex_partition_11 c =
  let open! Stdlib in
  if c <= 47 then -1
  else if c <= 102 then
    Char.code (String.unsafe_get __sedlex_table_19 (c - 48)) - 1
  else -1

let __sedlex_partition_14 c =
  let open! Stdlib in
  if c <= 47 then -1
  else if c <= 123 then
    Char.code (String.unsafe_get __sedlex_table_20 (c - 48)) - 1
  else -1

let __sedlex_partition_24 c =
  let open! Stdlib in
  if c <= 123 then -1 else if c <= 124 then 0 else -1

let __sedlex_partition_41 c =
  let open! Stdlib in
  if c <= 47 then -1
  else if c <= 95 then
    Char.code (String.unsafe_get __sedlex_table_21 (c - 48)) - 1
  else -1

let __sedlex_partition_27 c =
  let open! Stdlib in
  if c <= 38 then -1 else if c <= 39 then 0 else -1

let __sedlex_partition_32 c =
  let open! Stdlib in
  if c <= 60 then -1
  else if c <= 62 then
    Char.code (String.unsafe_get __sedlex_table_16 (c - 61)) - 1
  else -1

let __sedlex_partition_54 c =
  let open! Stdlib in
  if c <= 46 then -1
  else if c <= 122 then
    Char.code (String.unsafe_get __sedlex_table_22 (c - 47)) - 1
  else -1

let __sedlex_partition_38 c =
  let open! Stdlib in
  if c <= 45 then -1
  else if c <= 101 then
    Char.code (String.unsafe_get __sedlex_table_23 (c - 46)) - 1
  else -1

let __sedlex_partition_34 c =
  let open! Stdlib in
  if c <= 45 then -1
  else if c <= 61 then
    Char.code (String.unsafe_get __sedlex_table_24 (c - 46)) - 1
  else -1

let __sedlex_partition_6 c =
  let open! Stdlib in
  if c <= -1 then -1
  else if c <= 102 then Char.code (String.unsafe_get __sedlex_table_25 c) - 1
  else 0

let __sedlex_partition_30 c =
  let open! Stdlib in
  if c <= 47 then -1 else if c <= 55 then 0 else -1

let __sedlex_partition_42 c =
  let open! Stdlib in
  if c <= 45 then -1
  else if c <= 95 then
    Char.code (String.unsafe_get __sedlex_table_26 (c - 46)) - 1
  else -1

let __sedlex_partition_2 c =
  let open! Stdlib in
  if c <= -1 then -1
  else if c <= 120 then Char.code (String.unsafe_get __sedlex_table_27 c) - 1
  else 0

let __sedlex_partition_23 c =
  let open! Stdlib in
  if c <= -1 then -1
  else if c <= 12 then Char.code (String.unsafe_get __sedlex_table_28 c) - 1
  else if c <= 13 then -1
  else 0

let __sedlex_partition_57 c =
  let open! Stdlib in
  if c <= 31 then -1
  else if c <= 120 then
    Char.code (String.unsafe_get __sedlex_table_29 (c - 32)) - 1
  else -1

let __sedlex_partition_9 c =
  let open! Stdlib in
  if c <= 91 then -1 else if c <= 92 then 0 else -1

let __sedlex_partition_36 c =
  let open! Stdlib in
  if c <= 46 then -1
  else if c <= 61 then
    Char.code (String.unsafe_get __sedlex_table_30 (c - 47)) - 1
  else -1

let __sedlex_partition_18 c =
  let open! Stdlib in
  if c <= 39 then Char.code (String.unsafe_get __sedlex_table_31 (c - -1)) - 1
  else 1

let __sedlex_partition_20 c =
  let open! Stdlib in
  if c <= 9 then -1 else if c <= 10 then 0 else -1

let __sedlex_partition_26 c =
  let open! Stdlib in
  if c <= -1 then -1
  else if c <= 92 then Char.code (String.unsafe_get __sedlex_table_32 c) - 1
  else 0

let __sedlex_partition_31 c =
  let open! Stdlib in
  if c <= 47 then -1
  else if c <= 125 then
    Char.code (String.unsafe_get __sedlex_table_33 (c - 48)) - 1
  else -1

let __sedlex_partition_15 c =
  let open! Stdlib in
  if c <= -1 then -1
  else if c <= 125 then Char.code (String.unsafe_get __sedlex_table_34 c) - 1
  else 0

let __sedlex_partition_3 c =
  let open! Stdlib in
  if c <= -1 then -1
  else if c <= 51 then Char.code (String.unsafe_get __sedlex_table_35 c) - 1
  else 0

let __sedlex_partition_7 c =
  let open! Stdlib in
  if c <= 8191 then Char.code (String.unsafe_get __sedlex_table_36 (c - -1)) - 1
  else if c <= 65278 then
    if c <= 8286 then
      if c <= 8238 then if c <= 8202 then 2 else 1
      else if c <= 8239 then 2
      else 1
    else if c <= 12287 then if c <= 8287 then 2 else 1
    else if c <= 12288 then 2
    else 1
  else if c <= 65279 then 2
  else 1

let __sedlex_partition_22 c =
  let open! Stdlib in
  if c <= 64 then -1
  else if c <= 124 then
    Char.code (String.unsafe_get __sedlex_table_37 (c - 65)) - 1
  else -1

let __sedlex_partition_37 c =
  let open! Stdlib in
  if c <= 45 then -1
  else if c <= 120 then
    Char.code (String.unsafe_get __sedlex_table_38 (c - 46)) - 1
  else -1

let __sedlex_partition_39 c =
  let open! Stdlib in
  if c <= 47 then -1
  else if c <= 101 then
    Char.code (String.unsafe_get __sedlex_table_39 (c - 48)) - 1
  else -1

let __sedlex_partition_4 c =
  let open! Stdlib in
  if c <= -1 then -1 else 0

let __sedlex_partition_10 c =
  let open! Stdlib in
  if c <= 116 then -1 else if c <= 117 then 0 else -1

let __sedlex_partition_25 c =
  let open! Stdlib in
  if c <= 37 then -1 else if c <= 38 then 0 else -1

let __sedlex_partition_44 c =
  let open! Stdlib in
  if c <= 45 then -1
  else if c <= 76 then
    Char.code (String.unsafe_get __sedlex_table_40 (c - 46)) - 1
  else -1

let __sedlex_partition_56 c =
  let open! Stdlib in
  if c <= -1 then -1
  else if c <= 127 then Char.code (String.unsafe_get __sedlex_table_41 c) - 1
  else -1

let __sedlex_partition_8 c =
  let open! Stdlib in
  if c <= 8 then -1
  else if c <= 5760 then
    Char.code (String.unsafe_get __sedlex_table_42 (c - 9)) - 1
  else if c <= 8191 then -1
  else if c <= 65279 then
    if c <= 12288 then
      if c <= 8239 then if c <= 8202 then 0 else if c <= 8238 then -1 else 0
      else if c <= 8286 then -1
      else if c <= 8287 then 0
      else if c <= 12287 then -1
      else 0
    else if c <= 65278 then -1
    else 0
  else -1

let __sedlex_partition_51 c =
  let open! Stdlib in
  if c <= 57 then -1 else if c <= 58 then 0 else -1

let __sedlex_partition_48 c =
  let open! Stdlib in
  if c <= 45 then -1
  else if c <= 102 then
    Char.code (String.unsafe_get __sedlex_table_43 (c - 46)) - 1
  else -1

open Basic_unsafe_external
module Vec = Basic_vec
module Unicode = Lex_unicode
module Menhir_token = Lex_menhir_token
module Literal = Lex_literal
module Vec_comment = Lex_vec_comment
module Token_triple = Lex_token_triple
module Semi_insertion = Lex_semi_insertion
module Comment = Lex_comment
module Keyword_tbl = Lex_keyword_tbl

type char_literal = Literal.char_literal
type byte_literal = Literal.byte_literal

type lexical_error =
  | Illegal_character of int
  | Unterminated_string
  | Unterminated_string_in_variable_interploation
  | Unterminated_bytes
  | Interp_invalid_multiline_string
  | Interp_invalid_comment
  | Interp_invalid_attribute
  | Interp_missing_expression
  | Invalid_escape_sequence of string
  | Non_ascii_in_bytes of string
  | Invalid_dot_int of string
  | Invalid_byte_literal of string

include struct
  let _ = fun (_ : lexical_error) -> ()

  let sexp_of_lexical_error =
    (function
     | Illegal_character arg0__001_ ->
         let res0__002_ = Moon_sexp_conv.sexp_of_int arg0__001_ in
         S.List [ S.Atom "Illegal_character"; res0__002_ ]
     | Unterminated_string -> S.Atom "Unterminated_string"
     | Unterminated_string_in_variable_interploation ->
         S.Atom "Unterminated_string_in_variable_interploation"
     | Unterminated_bytes -> S.Atom "Unterminated_bytes"
     | Interp_invalid_multiline_string ->
         S.Atom "Interp_invalid_multiline_string"
     | Interp_invalid_comment -> S.Atom "Interp_invalid_comment"
     | Interp_invalid_attribute -> S.Atom "Interp_invalid_attribute"
     | Interp_missing_expression -> S.Atom "Interp_missing_expression"
     | Invalid_escape_sequence arg0__003_ ->
         let res0__004_ = Moon_sexp_conv.sexp_of_string arg0__003_ in
         S.List [ S.Atom "Invalid_escape_sequence"; res0__004_ ]
     | Non_ascii_in_bytes arg0__005_ ->
         let res0__006_ = Moon_sexp_conv.sexp_of_string arg0__005_ in
         S.List [ S.Atom "Non_ascii_in_bytes"; res0__006_ ]
     | Invalid_dot_int arg0__007_ ->
         let res0__008_ = Moon_sexp_conv.sexp_of_string arg0__007_ in
         S.List [ S.Atom "Invalid_dot_int"; res0__008_ ]
     | Invalid_byte_literal arg0__009_ ->
         let res0__010_ = Moon_sexp_conv.sexp_of_string arg0__009_ in
         S.List [ S.Atom "Invalid_byte_literal"; res0__010_ ]
      : lexical_error -> S.t)

  let _ = sexp_of_lexical_error
end

let lexing_error ~loc_start ~loc_end err =
  let message =
    match err with
    | Illegal_character c ->
        "unrecognized character u32:" ^ Printf.sprintf "%#x" c
    | Unterminated_string -> "(unterminated string)"
    | Unterminated_bytes -> "(unterminated bytes literal)"
    | Interp_invalid_multiline_string ->
        "invalid multiline string in string interpolation"
    | Interp_invalid_comment -> "invalid comment in string interpolation"
    | Interp_invalid_attribute -> "invalid attribute in string interpolation"
    | Interp_missing_expression -> "missing expression in string interpolation"
    | Unterminated_string_in_variable_interploation ->
        "(unterminated string in variable interpolation)"
    | Invalid_escape_sequence seq -> "invalid escape sequence: " ^ seq
    | Non_ascii_in_bytes s ->
        ("non-ASCII character is not allowed in bytes literal. If you meant to \
          use the UTF-8 encoding of '" ^ s ^ "', use escape sequence instead."
          : Stdlib.String.t)
          [@merlin.hide]
    | Invalid_dot_int s ->
        ("invalid tuple accessor: ." ^ s : Stdlib.String.t) [@merlin.hide]
    | Invalid_byte_literal s ->
        ("invalid byte literal: " ^ s : Stdlib.String.t) [@merlin.hide]
  in
  Errors.lexing_error ~loc_start ~loc_end message

module Basic_lexing = Lexing
module Lexing = Lex_moon_rt

module Lex_env : sig
  type t = {
    diagnostics : Diagnostics.t;
    docstrings : Vec_comment.t option;
    comment : bool;
    name : string;
    vec : Token_triple.t Vec.t;
    mutable current_line : int;
    mutable current_bol : int;
    last_unhandled_comment : (Comment.t * int) option ref;
    asi_context : Semi_insertion.asi_context;
    start_cnum : int;
    is_interpolation : bool;
  }
end = struct
  type t = {
    diagnostics : Diagnostics.t;
    docstrings : Vec_comment.t option;
    comment : bool;
    name : string;
    vec : Token_triple.t Vec.t;
    mutable current_line : int;
    mutable current_bol : int;
    last_unhandled_comment : (Comment.t * int) option ref;
    asi_context : Semi_insertion.asi_context;
    start_cnum : int;
    is_interpolation : bool;
  }
end

let lexeme (lexbuf : Lexing.lexbuf) =
  let offset = Lexing.lexeme_start lexbuf in
  let len = Lexing.lexeme_end lexbuf - offset in
  let buf = lexbuf.buf in
  Basic_utf8.string_of_utf8 buf ~offset ~len
[@@inline]

let sub_lexeme_to_end (lexbuf : Lexing.lexbuf) ~start =
  let offset = Lexing.lexeme_start lexbuf + start in
  let len = Lexing.lexeme_end lexbuf - offset in
  let buf = lexbuf.buf in
  Basic_utf8.string_of_utf8 buf ~offset ~len

let sub_lexeme_len (lexbuf : Lexing.lexbuf) ~start ~len =
  let offset = Lexing.lexeme_start lexbuf + start in
  let buf = lexbuf.buf in
  Basic_utf8.string_of_utf8 buf ~offset ~len

let digit_value (c : int) =
  match c with
  | _ when c >= 97 && c <= 102 -> 10 + c - Char.code 'a'
  | _ when c >= 65 && c <= 70 -> 10 + c - Char.code 'A'
  | _ when c >= 48 && c <= 57 -> c - Char.code '0'
  | _ -> assert false

let is_common_ascii (c : int) =
  (Char.code '0' <= c && c <= Char.code '9')
  || (Char.code 'A' <= c && c <= Char.code 'Z')
  || (Char.code 'a' <= c && c <= Char.code 'z')
  || c = Char.code '_'
[@@inline]

let lex_unicode_ident lexbuf (buf : Buffer.t) =
  let keep_going = ref true in
  while !keep_going do
    match Lexing.__private__next_int lexbuf with
    | -1 -> keep_going := false
    | c ->
        if is_common_ascii c then Buffer.add_char buf (Char.unsafe_chr c)
        else if Unicode.is_valid_unicode_codepoint c then
          Buffer.add_utf_8_uchar buf (Uchar.of_int c)
        else (
          Lexing.backoff lexbuf 1;
          keep_going := false)
  done

let char_for_backslash : int -> Uchar.t =
 fun code ->
  Uchar.of_int
    (match () with
    | _ when code = Char.code 'n' -> 10
    | _ when code = Char.code 'r' -> 13
    | _ when code = Char.code 'b' -> 8
    | _ when code = Char.code 't' -> 9
    | _ -> code)
[@@inline]

exception Overflow_max_codepoint

let char_code_for_hex_escape : int array -> int -> int -> int =
 fun buf ->
  fun pos ->
   fun len ->
    let end_pos = pos + len in
    let rec aux code pos =
      if code > 0x10ffff then raise Overflow_max_codepoint
      else if pos = end_pos then code
      else
        let digit = buf.(pos) in
        aux ((code lsl 4) + digit_value digit) (pos + 1)
    in
    aux 0 pos
[@@inline]

let char_for_hex_escape : int array -> int -> int -> Uchar.t =
 fun buf ->
  fun pos -> fun len -> Uchar.of_int (char_code_for_hex_escape buf pos len)
[@@inline]

let char_for_oct_escape : int array -> int -> int -> Uchar.t =
 fun buf ->
  fun pos ->
   fun len ->
    let end_pos = pos + len in
    let rec aux code pos =
      if code > 0x10ffff then raise Overflow_max_codepoint
      else if pos = end_pos then code
      else
        let digit = buf.(pos) in
        aux ((code lsl 3) + digit_value digit) (pos + 1)
    in
    Uchar.of_int (aux 0 pos)
[@@inline]

let make_pos ~(env : Lex_env.t) cnum =
  ({
     pos_fname = env.name;
     pos_lnum = env.current_line;
     pos_cnum = env.start_cnum + cnum;
     pos_bol = env.current_bol;
   }
    : Basic_lexing.position)
[@@inline]

let lexeme_spos ~env lexbuf = make_pos ~env (Lexing.lexeme_start lexbuf)
[@@inline]

let lexeme_epos ~env lexbuf = make_pos ~env (Lexing.lexeme_end lexbuf)
[@@inline]

let add_lexing_error ~(env : Lex_env.t) lexbuf error =
  Diagnostics.add_error env.diagnostics
    (lexing_error ~loc_start:(lexeme_spos ~env lexbuf)
       ~loc_end:(lexeme_epos ~env lexbuf) error)

let add_lexing_warning ~(env : Lex_env.t) lexbuf kind =
  let posa = Lexing.lexeme_start lexbuf in
  let posb = Lexing.lexeme_end lexbuf in
  let a = make_pos ~env posa in
  let b = make_pos ~env posb in
  let loc = Loc.of_menhir (a, b) in
  Diagnostics.add_warning env.diagnostics { Warnings.loc; kind }

let bytes ~env lexbuf =
  (let buf = Buffer.create 20 in
   let repr_buf = Buffer.create 20 in
   let keep_going = ref true in
   while !keep_going do
     let rec __sedlex_state_0 = function
       | lexbuf -> (
           match
             __sedlex_partition_1 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 7
           | 1 -> 9
           | 2 -> 8
           | 3 -> 0
           | 4 -> __sedlex_state_5 lexbuf
           | 5 -> 10
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_5 = function
       | lexbuf -> (
           Lex_moon_rt.mark lexbuf 9;
           match
             __sedlex_partition_2 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 6
           | 1 -> 1
           | 2 -> __sedlex_state_8 lexbuf
           | 3 -> __sedlex_state_15 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_8 = function
       | lexbuf -> (
           Lex_moon_rt.mark lexbuf 6;
           match
             __sedlex_partition_3 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_9 lexbuf
           | 1 -> __sedlex_state_12 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_9 = function
       | lexbuf -> (
           match
             __sedlex_partition_4 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_10 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_10 = function
       | lexbuf -> (
           match
             __sedlex_partition_4 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 5
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_12 = function
       | lexbuf -> (
           match
             __sedlex_partition_5 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_10 lexbuf
           | 1 -> __sedlex_state_13 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_13 = function
       | lexbuf -> (
           match
             __sedlex_partition_5 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 5
           | 1 -> 4
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_15 = function
       | lexbuf -> (
           Lex_moon_rt.mark lexbuf 6;
           match
             __sedlex_partition_6 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_16 lexbuf
           | 1 -> __sedlex_state_18 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_16 = function
       | lexbuf -> (
           match
             __sedlex_partition_4 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 3
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_18 = function
       | lexbuf -> (
           match
             __sedlex_partition_6 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 3
           | 1 -> 2
           | _ -> Lex_moon_rt.backtrack lexbuf)
     in
     Lex_moon_rt.start lexbuf;
     match __sedlex_state_0 lexbuf with
     | 0 -> keep_going := false
     | 1 ->
         let c =
           Uchar.to_char (char_for_backslash (Lexing.current_code_point lexbuf))
         in
         Buffer.add_char buf c;
         Buffer.add_string repr_buf (lexeme lexbuf)
     | 2 ->
         let c =
           Uchar.to_char (char_for_hex_escape lexbuf.buf (lexbuf.pos - 2) 2)
         in
         Buffer.add_char buf c;
         Buffer.add_string repr_buf (lexeme lexbuf)
     | 3 ->
         add_lexing_error ~env lexbuf (Invalid_escape_sequence (lexeme lexbuf))
     | 4 ->
         let c =
           Uchar.to_char (char_for_oct_escape lexbuf.buf (lexbuf.pos - 3) 3)
         in
         Buffer.add_char buf c;
         Buffer.add_string repr_buf (lexeme lexbuf)
     | 5 ->
         add_lexing_error ~env lexbuf (Invalid_escape_sequence (lexeme lexbuf))
     | 6 ->
         add_lexing_error ~env lexbuf (Invalid_escape_sequence (lexeme lexbuf))
     | 7 ->
         add_lexing_error ~env lexbuf Unterminated_bytes;
         keep_going := false
     | 8 ->
         Lexing.backoff lexbuf 1;
         add_lexing_error ~env lexbuf Unterminated_bytes;
         keep_going := false
     | 9 ->
         let c = Char.chr (Lexing.current_code_point lexbuf) in
         Buffer.add_char buf c;
         Buffer.add_char repr_buf c
     | 10 -> add_lexing_error ~env lexbuf (Non_ascii_in_bytes (lexeme lexbuf))
     | _ -> assert false
   done;
   Menhir_token.BYTES
     { bytes_val = Buffer.contents buf; bytes_repr = Buffer.contents repr_buf }
    : Menhir_token.token)

let string ~env ~multiline_string lexbuf startpos =
  (let buf = Buffer.create 20 in
   let repr_buf = Buffer.create 20 in
   let interps : Literal.interp_elem Vec.t = Vec.empty () in
   let rec interp_handle () =
     (let rec __sedlex_state_0 = function
        | lexbuf -> (
            match
              __sedlex_partition_7 (Lex_moon_rt.__private__next_int lexbuf)
            with
            | 0 -> 1
            | 1 -> 4
            | 2 -> __sedlex_state_3 lexbuf
            | 3 -> 2
            | 4 -> 0
            | _ -> Lex_moon_rt.backtrack lexbuf)
      and __sedlex_state_3 = function
        | lexbuf -> (
            Lex_moon_rt.mark lexbuf 4;
            match
              __sedlex_partition_8 (Lex_moon_rt.__private__next_int lexbuf)
            with
            | 0 -> __sedlex_state_4 lexbuf
            | 1 -> 0
            | _ -> Lex_moon_rt.backtrack lexbuf)
      and __sedlex_state_4 = function
        | lexbuf -> (
            match
              __sedlex_partition_8 (Lex_moon_rt.__private__next_int lexbuf)
            with
            | 0 -> __sedlex_state_4 lexbuf
            | 1 -> 0
            | _ -> Lex_moon_rt.backtrack lexbuf)
      in
      Lex_moon_rt.start lexbuf;
      match __sedlex_state_0 lexbuf with
      | 0 -> Lexing.lexeme_start lexbuf
      | 1 ->
          add_lexing_error ~env lexbuf Unterminated_string;
          Lexing.lexeme_start lexbuf
      | 2 ->
          add_lexing_error ~env lexbuf
            Unterminated_string_in_variable_interploation;
          Lexing.backoff lexbuf 1;
          Lexing.lexeme_start lexbuf
      | 3 ->
          add_lexing_error ~env lexbuf
            Unterminated_string_in_variable_interploation;
          Lexing.lexeme_start lexbuf
      | 4 ->
          let is_valid_interp c =
            Uchar.is_valid c
            && c <> Char.code '\n'
            && c <> Char.code '"'
            && c <> Char.code '{'
          in
          let head = Lexing.current_code_point lexbuf in
          if is_valid_interp head then (
            Buffer.add_utf_8_uchar buf (Uchar.of_int head);
            lex_unicode_ident lexbuf buf;
            interp_handle ())
          else (
            add_lexing_error ~env lexbuf
              (Illegal_character (Lexing.lexeme_start lexbuf));
            Buffer.add_utf_8_uchar buf
              (Uchar.of_int (Lexing.current_code_point lexbuf));
            interp_handle ())
      | _ -> assert false
       : int)
   in
   let rec normal ~startpos =
     let rec __sedlex_state_0 = function
       | lexbuf -> (
           match
             __sedlex_partition_12 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 11
           | 1 -> 13
           | 2 -> 12
           | 3 -> 0
           | 4 -> __sedlex_state_5 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_5 = function
       | lexbuf -> (
           Lex_moon_rt.mark lexbuf 13;
           match
             __sedlex_partition_13 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 10
           | 1 -> 1
           | 2 -> __sedlex_state_8 lexbuf
           | 3 -> __sedlex_state_15 lexbuf
           | 4 -> __sedlex_state_25 lexbuf
           | 5 -> __sedlex_state_30 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_8 = function
       | lexbuf -> (
           Lex_moon_rt.mark lexbuf 10;
           match
             __sedlex_partition_3 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_9 lexbuf
           | 1 -> __sedlex_state_12 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_9 = function
       | lexbuf -> (
           match
             __sedlex_partition_4 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_10 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_10 = function
       | lexbuf -> (
           match
             __sedlex_partition_4 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 5
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_12 = function
       | lexbuf -> (
           match
             __sedlex_partition_5 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_10 lexbuf
           | 1 -> __sedlex_state_13 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_13 = function
       | lexbuf -> (
           match
             __sedlex_partition_5 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 5
           | 1 -> 4
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_15 = function
       | lexbuf -> (
           Lex_moon_rt.mark lexbuf 10;
           match
             __sedlex_partition_14 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_16 lexbuf
           | 1 -> __sedlex_state_20 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_16 = function
       | lexbuf -> (
           match
             __sedlex_partition_11 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_17 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_17 = function
       | lexbuf -> (
           match
             __sedlex_partition_11 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_18 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_18 = function
       | lexbuf -> (
           match
             __sedlex_partition_11 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 6
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_20 = function
       | lexbuf -> (
           match
             __sedlex_partition_15 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_21 lexbuf
           | 1 -> __sedlex_state_23 lexbuf
           | 2 -> 8
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_21 = function
       | lexbuf -> (
           match
             __sedlex_partition_16 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_21 lexbuf
           | 1 -> 8
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_23 = function
       | lexbuf -> (
           match
             __sedlex_partition_15 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_21 lexbuf
           | 1 -> __sedlex_state_23 lexbuf
           | 2 -> 7
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_25 = function
       | lexbuf -> (
           Lex_moon_rt.mark lexbuf 10;
           match
             __sedlex_partition_6 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_26 lexbuf
           | 1 -> __sedlex_state_28 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_26 = function
       | lexbuf -> (
           match
             __sedlex_partition_4 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 3
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_28 = function
       | lexbuf -> (
           match
             __sedlex_partition_6 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> 3
           | 1 -> 2
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_30 = function
       | lexbuf -> (
           Lex_moon_rt.mark lexbuf 9;
           match
             __sedlex_partition_17 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_31 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     and __sedlex_state_31 = function
       | lexbuf -> (
           Lex_moon_rt.mark lexbuf 9;
           match
             __sedlex_partition_17 (Lex_moon_rt.__private__next_int lexbuf)
           with
           | 0 -> __sedlex_state_31 lexbuf
           | _ -> Lex_moon_rt.backtrack lexbuf)
     in
     Lex_moon_rt.start lexbuf;
     match __sedlex_state_0 lexbuf with
     | 0 ->
         if multiline_string then (
           Buffer.add_utf_8_uchar buf
             (Uchar.of_int (Lexing.current_code_point lexbuf));
           Buffer.add_utf_8_uchar repr_buf
             (Uchar.of_int (Lexing.current_code_point lexbuf));
           normal ~startpos)
         else if Buffer.length buf <> 0 then
           Vec.push interps
             (Literal.Interp_lit
                {
                  c = Buffer.contents buf;
                  repr = Buffer.contents repr_buf;
                  loc_ =
                    Loc.of_menhir
                      ( make_pos ~env startpos,
                        make_pos ~env (Lexing.lexeme_end lexbuf) );
                })
     | 1 ->
         let s = Lexing.current_code_point lexbuf in
         Buffer.add_utf_8_uchar buf (char_for_backslash s);
         Buffer.add_string repr_buf (lexeme lexbuf);
         normal ~startpos
     | 2 ->
         Buffer.add_utf_8_uchar buf
           (char_for_hex_escape lexbuf.buf (lexbuf.pos - 2) 2);
         Buffer.add_string repr_buf (lexeme lexbuf);
         normal ~startpos
     | 3 ->
         add_lexing_error ~env lexbuf (Invalid_escape_sequence (lexeme lexbuf));
         normal ~startpos
     | 4 ->
         Buffer.add_utf_8_uchar buf
           (char_for_oct_escape lexbuf.buf (lexbuf.pos - 3) 3);
         Buffer.add_string repr_buf (lexeme lexbuf);
         normal ~startpos
     | 5 ->
         add_lexing_error ~env lexbuf (Invalid_escape_sequence (lexeme lexbuf));
         normal ~startpos
     | 6 ->
         let code = char_code_for_hex_escape lexbuf.buf (lexbuf.pos - 4) 4 in
         (if 0xD800 <= code && code <= 0xDBFF then (
            let first_code_repr = lexeme lexbuf in
            Buffer.add_string repr_buf first_code_repr;
            let rec __sedlex_state_0 = function
              | lexbuf -> (
                  match
                    __sedlex_partition_9
                      (Lex_moon_rt.__private__next_int lexbuf)
                  with
                  | 0 -> __sedlex_state_1 lexbuf
                  | _ -> Lex_moon_rt.backtrack lexbuf)
            and __sedlex_state_1 = function
              | lexbuf -> (
                  match
                    __sedlex_partition_10
                      (Lex_moon_rt.__private__next_int lexbuf)
                  with
                  | 0 -> __sedlex_state_2 lexbuf
                  | _ -> Lex_moon_rt.backtrack lexbuf)
            and __sedlex_state_2 = function
              | lexbuf -> (
                  match
                    __sedlex_partition_11
                      (Lex_moon_rt.__private__next_int lexbuf)
                  with
                  | 0 -> __sedlex_state_3 lexbuf
                  | _ -> Lex_moon_rt.backtrack lexbuf)
            and __sedlex_state_3 = function
              | lexbuf -> (
                  match
                    __sedlex_partition_11
                      (Lex_moon_rt.__private__next_int lexbuf)
                  with
                  | 0 -> __sedlex_state_4 lexbuf
                  | _ -> Lex_moon_rt.backtrack lexbuf)
            and __sedlex_state_4 = function
              | lexbuf -> (
                  match
                    __sedlex_partition_11
                      (Lex_moon_rt.__private__next_int lexbuf)
                  with
                  | 0 -> __sedlex_state_5 lexbuf
                  | _ -> Lex_moon_rt.backtrack lexbuf)
            and __sedlex_state_5 = function
              | lexbuf -> (
                  match
                    __sedlex_partition_11
                      (Lex_moon_rt.__private__next_int lexbuf)
                  with
                  | 0 -> 0
                  | _ -> Lex_moon_rt.backtrack lexbuf)
            in
            Lex_moon_rt.start lexbuf;
            match __sedlex_state_0 lexbuf with
            | 0 ->
                let second_code_repr = lexeme lexbuf in
                Buffer.add_string repr_buf second_code_repr;
                let code2 =
                  char_code_for_hex_escape lexbuf.buf (lexbuf.pos - 4) 4
                in
                if code2 >= 0xDC00 then
                  let actual_code =
                    ((code - 0xD800) lsl 10) + (code2 - 0xDC00) + 0x10000
                  in
                  if Uchar.is_valid actual_code then
                    Buffer.add_utf_8_uchar buf (Uchar.of_int actual_code)
                  else
                    add_lexing_error ~env lexbuf
                      (Invalid_escape_sequence
                         (first_code_repr ^ second_code_repr))
                else
                  add_lexing_error ~env lexbuf
                    (Invalid_escape_sequence (first_code_repr ^ second_code_repr))
            | _ ->
                add_lexing_error ~env lexbuf
                  (Invalid_escape_sequence first_code_repr))
          else if Uchar.is_valid code then (
            Buffer.add_utf_8_uchar buf (Uchar.unsafe_of_int code);
            Buffer.add_string repr_buf (lexeme lexbuf))
          else
            let code_repr = lexeme lexbuf in
            Buffer.add_string repr_buf code_repr;
            add_lexing_error ~env lexbuf (Invalid_escape_sequence code_repr));
         normal ~startpos
     | 7 ->
         (try
            Buffer.add_utf_8_uchar buf
              (char_for_hex_escape lexbuf.buf (lexbuf.start_pos + 3)
                 (lexbuf.pos - lexbuf.start_pos - 4))
          with Overflow_max_codepoint ->
            add_lexing_error ~env lexbuf
              (Invalid_escape_sequence (lexeme lexbuf)));
         Buffer.add_string repr_buf (lexeme lexbuf);
         normal ~startpos
     | 8 ->
         add_lexing_error ~env lexbuf (Invalid_escape_sequence (lexeme lexbuf));
         normal ~startpos
     | 9 ->
         if Buffer.length buf <> 0 then
           Vec.push interps
             (Literal.Interp_lit
                {
                  c = Buffer.contents buf;
                  repr = Buffer.contents repr_buf;
                  loc_ =
                    Loc.of_menhir
                      ( make_pos ~env startpos,
                        make_pos ~env (Lexing.lexeme_start lexbuf) );
                });
         Buffer.clear buf;
         Buffer.clear repr_buf;
         let apos = Lexing.lexeme_end lexbuf in
         let bpos = interp_handle () in
         let loc = Loc.of_menhir (make_pos ~env apos, make_pos ~env bpos) in
         if Buffer.length buf = 0 then
           add_lexing_error ~env lexbuf Interp_missing_expression
         else
           Vec.push interps
             (Literal.Interp_source { source = Buffer.contents buf; loc_ = loc });
         Buffer.clear buf;
         let startpos = Lexing.lexeme_end lexbuf in
         normal ~startpos
     | 10 ->
         add_lexing_error ~env lexbuf (Invalid_escape_sequence (lexeme lexbuf));
         normal ~startpos
     | 11 ->
         add_lexing_error ~env lexbuf Unterminated_string;
         if Buffer.length buf <> 0 then
           Vec.push interps
             (Literal.Interp_lit
                {
                  c = Buffer.contents buf;
                  repr = Buffer.contents repr_buf;
                  loc_ =
                    Loc.of_menhir
                      ( make_pos ~env startpos,
                        make_pos ~env (Lexing.lexeme_end lexbuf) );
                })
     | 12 ->
         Lexing.backoff lexbuf 1;
         if not multiline_string then
           add_lexing_error ~env lexbuf Unterminated_string;
         if Buffer.length buf <> 0 then
           Vec.push interps
             (Literal.Interp_lit
                {
                  c = Buffer.contents buf;
                  repr = Buffer.contents repr_buf;
                  loc_ =
                    Loc.of_menhir
                      ( make_pos ~env startpos,
                        make_pos ~env (Lexing.lexeme_end lexbuf) );
                })
     | 13 ->
         Buffer.add_utf_8_uchar buf
           (Uchar.of_int (Lexing.current_code_point lexbuf));
         Buffer.add_utf_8_uchar repr_buf
           (Uchar.of_int (Lexing.current_code_point lexbuf));
         normal ~startpos
     | _ -> assert false
   in
   normal ~startpos;
   if Vec.is_empty interps then
     [
       Literal.Interp_lit
         {
           c = "";
           repr = "";
           loc_ =
             Loc.of_menhir
               (make_pos ~env startpos, make_pos ~env (Lexing.lexeme_end lexbuf));
         };
     ]
   else Vec.to_list interps
    : Literal.interp_elem list)

let add_token ~(env : Lex_env.t) (tok : Menhir_token.token) sp ep =
  Semi_insertion.add_token env.asi_context ~tokens:env.vec tok
    ~last_unhandled_comment:env.last_unhandled_comment;
  Vec.push env.vec (tok, sp, ep);
  if env.comment then
    let tok_index = Vec.length env.vec - 1 in
    let prehandle_comment (c : Comment.t) =
      env.last_unhandled_comment := Some (c, tok_index)
    in
    let handle_comment ((c : Comment.t), i) =
      let at_file_start = ref false in
      let count_newlines start_index direction =
        let rec go index count =
          let target_index = index + direction in
          match Vec.get_opt env.vec target_index with
          | Some (COMMENT _, _, _) -> count
          | Some (NEWLINE, _, _) ->
              if count >= 2 then count else go target_index (count + 1)
          | None | Some (EOF, _, _) ->
              if direction < 0 then at_file_start := true;
              0
          | Some _ -> count
        in
        go start_index 0
      in
      let leading_newlines = Int.min 2 (count_newlines i (-1)) in
      let trailing_newlines = Int.min 2 (Int.max 1 (count_newlines i 1)) in
      let _, sp, ep = Vec.get env.vec i in
      let kind =
        if leading_newlines = 0 && not !at_file_start then
          Comment.Inline_trailing
        else
          Comment.Ownline
            {
              leading_blank_line = leading_newlines = 2 && not !at_file_start;
              trailing_blank_line = trailing_newlines = 2;
            }
      in
      Vec.set env.vec i (COMMENT { c with kind }, sp, ep)
    in
    match (!(env.last_unhandled_comment), tok) with
    | _, NEWLINE -> ()
    | Some ci, COMMENT c ->
        handle_comment ci;
        prehandle_comment c
    | None, COMMENT c -> prehandle_comment c
    | Some ci, _ -> handle_comment ci
    | None, _ -> ()

let loc ~env lexbuf ?(start_offset = 0) tok =
  let posa = Lexing.lexeme_start lexbuf in
  let posb = Lexing.lexeme_end lexbuf in
  let a = make_pos ~env (posa + start_offset) in
  let b = make_pos ~env posb in
  add_token ~env tok a b
[@@inline]

let main ~(env : Lex_env.t) ~preserve_comment lexbuf =
  let has_work = ref true in
  while !has_work do
    let b = lexbuf in
    let rec __sedlex_state_0 = function
      | b -> (
          match __sedlex_partition_19 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 63
          | 1 -> 64
          | 2 -> __sedlex_state_3 b
          | 3 -> 0
          | 4 -> __sedlex_state_6 b
          | 5 -> __sedlex_state_8 b
          | 6 -> 11
          | 7 -> __sedlex_state_11 b
          | 8 -> __sedlex_state_14 b
          | 9 -> __sedlex_state_16 b
          | 10 -> __sedlex_state_18 b
          | 11 -> __sedlex_state_20 b
          | 12 -> 28
          | 13 -> 29
          | 14 -> __sedlex_state_47 b
          | 15 -> __sedlex_state_48 b
          | 16 -> 35
          | 17 -> __sedlex_state_50 b
          | 18 -> __sedlex_state_52 b
          | 19 -> __sedlex_state_58 b
          | 20 -> __sedlex_state_60 b
          | 21 -> __sedlex_state_82 b
          | 22 -> __sedlex_state_83 b
          | 23 -> 40
          | 24 -> __sedlex_state_86 b
          | 25 -> __sedlex_state_89 b
          | 26 -> __sedlex_state_92 b
          | 27 -> 55
          | 28 -> __sedlex_state_95 b
          | 29 -> 47
          | 30 -> 49
          | 31 -> 27
          | 32 -> __sedlex_state_101 b
          | 33 -> 48
          | 34 -> __sedlex_state_120 b
          | 35 -> 50
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_3 = function
      | b -> (
          Lex_moon_rt.mark b 1;
          match __sedlex_partition_17 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_4 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_4 = function
      | b -> (
          Lex_moon_rt.mark b 1;
          match __sedlex_partition_17 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_4 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_6 = function
      | b -> (
          Lex_moon_rt.mark b 0;
          match __sedlex_partition_20 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 0
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_8 = function
      | b -> (
          Lex_moon_rt.mark b 56;
          match __sedlex_partition_21 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 45
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_11 = function
      | b -> (
          Lex_moon_rt.mark b 64;
          match __sedlex_partition_22 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_12 b
          | 1 -> __sedlex_state_13 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_12 = function
      | b -> (
          Lex_moon_rt.mark b 15;
          match __sedlex_partition_23 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_12 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_13 = function
      | b -> (
          Lex_moon_rt.mark b 14;
          match __sedlex_partition_23 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_13 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_14 = function
      | b -> (
          Lex_moon_rt.mark b 64;
          match __sedlex_partition_24 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 13
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_16 = function
      | b -> (
          Lex_moon_rt.mark b 32;
          match __sedlex_partition_21 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 61
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_18 = function
      | b -> (
          Lex_moon_rt.mark b 26;
          match __sedlex_partition_25 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 25
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_20 = function
      | b -> (
          Lex_moon_rt.mark b 64;
          match __sedlex_partition_26 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_21 b
          | 1 -> __sedlex_state_23 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_21 = function
      | b -> (
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 5
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_23 = function
      | b -> (
          match __sedlex_partition_28 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_24 b
          | 1 -> __sedlex_state_26 b
          | 2 -> __sedlex_state_31 b
          | 3 -> __sedlex_state_41 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_24 = function
      | b -> (
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 6
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_26 = function
      | b -> (
          match __sedlex_partition_29 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_27 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_27 = function
      | b -> (
          match __sedlex_partition_30 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_28 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_28 = function
      | b -> (
          match __sedlex_partition_30 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_29 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_29 = function
      | b -> (
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 8
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_31 = function
      | b -> (
          match __sedlex_partition_14 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_32 b
          | 1 -> __sedlex_state_37 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_32 = function
      | b -> (
          match __sedlex_partition_11 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_33 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_33 = function
      | b -> (
          match __sedlex_partition_11 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_34 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_34 = function
      | b -> (
          match __sedlex_partition_11 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_35 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_35 = function
      | b -> (
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 9
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_37 = function
      | b -> (
          match __sedlex_partition_11 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_38 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_38 = function
      | b -> (
          match __sedlex_partition_31 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_38 b
          | 1 -> __sedlex_state_39 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_39 = function
      | b -> (
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 10
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_41 = function
      | b -> (
          match __sedlex_partition_11 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_42 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_42 = function
      | b -> (
          match __sedlex_partition_11 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_43 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_43 = function
      | b -> (
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 7
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_47 = function
      | b -> (
          Lex_moon_rt.mark b 30;
          match __sedlex_partition_21 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 61
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_48 = function
      | b -> (
          Lex_moon_rt.mark b 53;
          match __sedlex_partition_21 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 61
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_50 = function
      | b -> (
          Lex_moon_rt.mark b 54;
          match __sedlex_partition_32 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 61
          | 1 -> 3
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_52 = function
      | b -> (
          Lex_moon_rt.mark b 37;
          match __sedlex_partition_33 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_53 b
          | 1 -> __sedlex_state_57 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_53 = function
      | b -> (
          Lex_moon_rt.mark b 57;
          match __sedlex_partition_34 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 60
          | 1 -> 59
          | 2 -> 58
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_57 = function
      | b -> (
          Lex_moon_rt.mark b 36;
          match __sedlex_partition_35 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_57 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_58 = function
      | b -> (
          Lex_moon_rt.mark b 31;
          match __sedlex_partition_36 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_59 b
          | 1 -> 61
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_59 = function
      | b -> (
          Lex_moon_rt.mark b 4;
          match __sedlex_partition_23 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_59 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_60 = function
      | b -> (
          Lex_moon_rt.mark b 22;
          match __sedlex_partition_37 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_61 b
          | 1 -> __sedlex_state_67 b
          | 2 -> __sedlex_state_71 b
          | 3 -> __sedlex_state_68 b
          | 4 -> __sedlex_state_73 b
          | 5 -> __sedlex_state_70 b
          | 6 -> __sedlex_state_75 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_61 = function
      | b -> (
          Lex_moon_rt.mark b 24;
          match __sedlex_partition_38 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 23
          | 1 -> __sedlex_state_63 b
          | 2 -> __sedlex_state_64 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_63 = function
      | b -> (
          Lex_moon_rt.mark b 24;
          match __sedlex_partition_39 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_63 b
          | 1 -> __sedlex_state_64 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_64 = function
      | b -> (
          match __sedlex_partition_40 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_65 b
          | 1 -> __sedlex_state_66 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_65 = function
      | b -> (
          match __sedlex_partition_35 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_66 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_66 = function
      | b -> (
          Lex_moon_rt.mark b 24;
          match __sedlex_partition_41 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_66 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_67 = function
      | b -> (
          Lex_moon_rt.mark b 22;
          match __sedlex_partition_42 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_61 b
          | 1 -> __sedlex_state_67 b
          | 2 -> __sedlex_state_68 b
          | 3 -> __sedlex_state_70 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_68 = function
      | b -> (
          Lex_moon_rt.mark b 22;
          match __sedlex_partition_43 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_69 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_69 = function
      | b -> (
          match __sedlex_partition_43 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 23
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_70 = function
      | b -> (
          Lex_moon_rt.mark b 22;
          match __sedlex_partition_44 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_69 b
          | 1 -> __sedlex_state_68 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_71 = function
      | b -> (
          match __sedlex_partition_45 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_72 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_72 = function
      | b -> (
          Lex_moon_rt.mark b 22;
          match __sedlex_partition_46 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_69 b
          | 1 -> __sedlex_state_72 b
          | 2 -> __sedlex_state_68 b
          | 3 -> __sedlex_state_70 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_73 = function
      | b -> (
          match __sedlex_partition_30 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_74 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_74 = function
      | b -> (
          Lex_moon_rt.mark b 22;
          match __sedlex_partition_47 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_69 b
          | 1 -> __sedlex_state_74 b
          | 2 -> __sedlex_state_68 b
          | 3 -> __sedlex_state_70 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_75 = function
      | b -> (
          match __sedlex_partition_11 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_76 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_76 = function
      | b -> (
          Lex_moon_rt.mark b 22;
          match __sedlex_partition_48 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_77 b
          | 1 -> __sedlex_state_76 b
          | 2 -> __sedlex_state_68 b
          | 3 -> __sedlex_state_70 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_77 = function
      | b -> (
          Lex_moon_rt.mark b 24;
          match __sedlex_partition_49 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 23
          | 1 -> __sedlex_state_78 b
          | 2 -> __sedlex_state_79 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_78 = function
      | b -> (
          Lex_moon_rt.mark b 24;
          match __sedlex_partition_50 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_78 b
          | 1 -> __sedlex_state_79 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_79 = function
      | b -> (
          match __sedlex_partition_40 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_80 b
          | 1 -> __sedlex_state_81 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_80 = function
      | b -> (
          match __sedlex_partition_35 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_81 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_81 = function
      | b -> (
          Lex_moon_rt.mark b 24;
          match __sedlex_partition_41 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_81 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_82 = function
      | b -> (
          Lex_moon_rt.mark b 22;
          match __sedlex_partition_42 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_61 b
          | 1 -> __sedlex_state_67 b
          | 2 -> __sedlex_state_68 b
          | 3 -> __sedlex_state_70 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_83 = function
      | b -> (
          Lex_moon_rt.mark b 39;
          match __sedlex_partition_51 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 38
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_86 = function
      | b -> (
          Lex_moon_rt.mark b 43;
          match __sedlex_partition_52 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 33
          | 1 -> 46
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_89 = function
      | b -> (
          Lex_moon_rt.mark b 41;
          match __sedlex_partition_32 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 44
          | 1 -> 2
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_92 = function
      | b -> (
          Lex_moon_rt.mark b 42;
          match __sedlex_partition_32 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 46
          | 1 -> 34
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_95 = function
      | b -> (
          Lex_moon_rt.mark b 64;
          match __sedlex_partition_53 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_96 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_96 = function
      | b -> (
          Lex_moon_rt.mark b 16;
          match __sedlex_partition_54 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_97 b
          | 1 -> __sedlex_state_96 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_97 = function
      | b -> (
          match __sedlex_partition_53 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_96 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_101 = function
      | b -> (
          Lex_moon_rt.mark b 64;
          match __sedlex_partition_55 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 12
          | 1 -> __sedlex_state_103 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_103 = function
      | b -> (
          Lex_moon_rt.mark b 21;
          match __sedlex_partition_56 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_104 b
          | 1 -> __sedlex_state_106 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_104 = function
      | b -> (
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 19
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_106 = function
      | b -> (
          match __sedlex_partition_57 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_107 b
          | 1 -> __sedlex_state_109 b
          | 2 -> __sedlex_state_110 b
          | 3 -> __sedlex_state_115 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_107 = function
      | b -> (
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 20
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_109 = function
      | b -> (
          Lex_moon_rt.mark b 19;
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 20
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_110 = function
      | b -> (
          match __sedlex_partition_29 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_111 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_111 = function
      | b -> (
          match __sedlex_partition_30 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_112 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_112 = function
      | b -> (
          match __sedlex_partition_30 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_113 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_113 = function
      | b -> (
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 18
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_115 = function
      | b -> (
          match __sedlex_partition_11 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_116 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_116 = function
      | b -> (
          match __sedlex_partition_11 (Lex_moon_rt.__private__next_int b) with
          | 0 -> __sedlex_state_117 b
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_117 = function
      | b -> (
          match __sedlex_partition_27 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 17
          | _ -> Lex_moon_rt.backtrack b)
    and __sedlex_state_120 = function
      | b -> (
          Lex_moon_rt.mark b 51;
          match __sedlex_partition_58 (Lex_moon_rt.__private__next_int b) with
          | 0 -> 62
          | 1 -> 52
          | _ -> Lex_moon_rt.backtrack b)
    in
    Lex_moon_rt.start b;
    match __sedlex_state_0 b with
    | 0 ->
        loc ~env lexbuf NEWLINE;
        env.current_bol <- Lexing.lexeme_end b;
        env.current_line <- env.current_line + 1
    | 1 -> ()
    | 2 -> loc ~env lexbuf FAT_ARROW
    | 3 -> loc ~env lexbuf THIN_ARROW
    | 4 ->
        if env.is_interpolation then
          add_lexing_error ~env lexbuf Interp_invalid_comment;
        if env.comment then (
          let comment =
            {
              Comment.content = lexeme b;
              kind = Inline_trailing;
              consumed_by_docstring = ref false;
            }
          in
          preserve_comment comment;
          loc ~env lexbuf (COMMENT comment))
    | 5 ->
        let start = Lexing.lexeme_start b in
        let literal : char_literal =
          {
            char_val = Uchar.of_int b.Lexing.buf.(start + 1);
            char_repr =
              sub_lexeme_len ~start:1
                ~len:(Lexing.lexeme_end b - Lexing.lexeme_start b - 2)
                b;
          }
        in
        loc ~env lexbuf (CHAR literal)
    | 6 ->
        let s = b.buf.(b.pos - 2) in
        let literal : char_literal =
          {
            char_val = char_for_backslash s;
            char_repr = sub_lexeme_len ~start:1 ~len:2 b;
          }
        in
        loc ~env lexbuf (CHAR literal)
    | 7 ->
        let literal : char_literal =
          {
            char_val = char_for_hex_escape b.buf (b.pos - 3) 2;
            char_repr = sub_lexeme_len ~start:1 ~len:4 b;
          }
        in
        loc ~env lexbuf (CHAR literal)
    | 8 ->
        let literal : char_literal =
          {
            char_val = char_for_oct_escape b.buf (b.pos - 4) 3;
            char_repr = sub_lexeme_len ~start:1 ~len:5 b;
          }
        in
        loc ~env lexbuf (CHAR literal)
    | 9 ->
        let literal : char_literal =
          {
            char_val = char_for_hex_escape b.buf (b.pos - 5) 4;
            char_repr = sub_lexeme_len ~start:1 ~len:6 b;
          }
        in
        loc ~env lexbuf (CHAR literal)
    | 10 ->
        let char_val =
          try
            char_for_hex_escape b.buf (b.start_pos + 4) (b.pos - b.start_pos - 6)
          with Overflow_max_codepoint ->
            let esc_start = Lexing.lexeme_start b + 1 in
            let esc_end = Lexing.lexeme_end b - 1 in
            let esc =
              Basic_utf8.string_of_utf8 b.buf ~offset:esc_start
                ~len:(esc_end - esc_start)
            in
            add_lexing_error ~env lexbuf (Invalid_escape_sequence esc);
            Uchar.of_int 0x10ffff
        in
        loc ~env lexbuf
          (CHAR
             {
               char_val;
               char_repr =
                 sub_lexeme_len ~start:1
                   ~len:(Lexing.lexeme_end b - Lexing.lexeme_start b - 2)
                   b;
             })
    | 11 ->
        let loca = Lexing.lexeme_start b in
        let tok =
          match string ~env ~multiline_string:false lexbuf loca with
          | Literal.Interp_lit { c; repr } :: [] ->
              Menhir_token.STRING { string_val = c; string_repr = repr }
          | interps -> Menhir_token.INTERP interps
        in
        let locb = Lexing.lexeme_end b in
        add_token ~env tok (make_pos ~env loca) (make_pos ~env locb)
    | 12 ->
        let loca = Lexing.lexeme_start b in
        let tok = bytes ~env lexbuf in
        let locb = Lexing.lexeme_end b in
        add_token ~env tok (make_pos ~env loca) (make_pos ~env locb)
    | 13 ->
        if env.is_interpolation then
          add_lexing_error ~env lexbuf Interp_invalid_multiline_string;
        let loca = Lexing.lexeme_start b in
        let tok =
          Menhir_token.MULTILINE_INTERP
            (string ~env ~multiline_string:true lexbuf loca)
        in
        let locb = Lexing.lexeme_end b in
        add_token ~env tok (make_pos ~env loca) (make_pos ~env locb)
    | 14 ->
        if env.is_interpolation then
          add_lexing_error ~env lexbuf Interp_invalid_multiline_string;
        loc ~env lexbuf (MULTILINE_STRING (sub_lexeme_to_end ~start:2 b))
    | 15 ->
        if env.is_interpolation then
          add_lexing_error ~env lexbuf Interp_invalid_attribute;
        loc ~env lexbuf (ATTRIBUTE (sub_lexeme_to_end ~start:1 b))
    | 16 -> loc ~env lexbuf (PACKAGE_NAME (sub_lexeme_to_end ~start:1 b))
    | 17 ->
        let literal : byte_literal =
          {
            byte_val = Uchar.to_int (char_for_hex_escape b.buf (b.pos - 3) 2);
            byte_repr = sub_lexeme_len b ~start:2 ~len:4;
          }
        in
        loc ~env lexbuf (BYTE literal)
    | 18 ->
        let literal : byte_literal =
          {
            byte_val = Uchar.to_int (char_for_oct_escape b.buf (b.pos - 4) 3);
            byte_repr = sub_lexeme_len b ~start:2 ~len:5;
          }
        in
        loc ~env lexbuf (BYTE literal)
    | 19 ->
        let literal : byte_literal =
          {
            byte_val = b.Lexing.buf.(Lexing.lexeme_start b + 2);
            byte_repr = sub_lexeme_len b ~start:2 ~len:1;
          }
        in
        loc ~env lexbuf (BYTE literal)
    | 20 ->
        let s = b.buf.(b.pos - 2) in
        let literal : byte_literal =
          {
            byte_val = Uchar.to_int (char_for_backslash s);
            byte_repr = sub_lexeme_len b ~start:2 ~len:2;
          }
        in
        loc ~env lexbuf (BYTE literal)
    | 21 ->
        let buf = Buffer.create 10 in
        let keep_going = ref true in
        while !keep_going do
          let __sedlex_state_0 = function
            | b -> (
                match
                  __sedlex_partition_18 (Lex_moon_rt.__private__next_int b)
                with
                | 0 -> 0
                | 1 -> 1
                | 2 -> 0
                | _ -> Lex_moon_rt.backtrack b)
          in
          Lex_moon_rt.start b;
          match __sedlex_state_0 b with
          | 0 -> keep_going := false
          | 1 ->
              let c = Lexing.current_code_point lexbuf in
              if is_common_ascii c then Buffer.add_char buf (Char.unsafe_chr c)
              else if Unicode.is_valid_unicode_codepoint c then
                Buffer.add_utf_8_uchar buf (Uchar.of_int c)
          | _ -> assert false
        done;
        add_lexing_error ~env lexbuf
          (Invalid_byte_literal (Buffer.contents buf));
        loc ~env lexbuf (BYTE { byte_val = 0; byte_repr = Buffer.contents buf })
    | 22 -> loc ~env lexbuf (INT (lexeme b))
    | 23 ->
        Lexing.backoff b 2;
        loc ~env lexbuf (INT (lexeme b))
    | 24 -> loc ~env lexbuf (FLOAT (lexeme b))
    | 25 -> loc ~env lexbuf AMPERAMPER
    | 26 -> loc ~env lexbuf AMPER
    | 27 -> loc ~env lexbuf CARET
    | 28 -> loc ~env lexbuf LPAREN
    | 29 -> loc ~env lexbuf RPAREN
    | 30 -> loc ~env lexbuf (INFIX3 "*")
    | 31 -> loc ~env lexbuf (INFIX3 "/")
    | 32 -> loc ~env lexbuf (INFIX3 "%")
    | 33 -> loc ~env lexbuf (INFIX2 "<<")
    | 34 -> loc ~env lexbuf (INFIX2 ">>")
    | 35 -> loc ~env lexbuf COMMA
    | 36 ->
        let idx =
          let lexeme = sub_lexeme_to_end b ~start:1 in
          match int_of_string_opt lexeme with
          | Some idx -> idx
          | None ->
              add_lexing_error ~env b (Invalid_dot_int lexeme);
              0
        in
        loc ~env lexbuf (DOT_INT idx) ~start_offset:1
    | 37 ->
        let buf = Buffer.create 10 in
        Lexing.set_start b (Lexing.lexeme_end b);
        lex_unicode_ident b buf;
        let name = Buffer.contents buf in
        if String.length name > 0 && 'A' <= name.[0] && name.[0] <= 'Z' then
          loc ~env lexbuf (DOT_UIDENT name)
        else loc ~env lexbuf (DOT_LIDENT name)
    | 38 -> loc ~env lexbuf COLONCOLON
    | 39 -> loc ~env lexbuf COLON
    | 40 -> loc ~env lexbuf Menhir_token.real_semi
    | 41 -> loc ~env lexbuf EQUAL
    | 42 -> loc ~env lexbuf (INFIX1 ">")
    | 43 -> loc ~env lexbuf (INFIX1 "<")
    | 44 -> loc ~env lexbuf (INFIX1 "==")
    | 45 -> loc ~env lexbuf (INFIX1 "!=")
    | 46 -> loc ~env lexbuf (INFIX1 (lexeme b))
    | 47 -> loc ~env lexbuf LBRACKET
    | 48 -> loc ~env lexbuf LBRACE
    | 49 -> loc ~env lexbuf RBRACKET
    | 50 -> loc ~env lexbuf RBRACE
    | 51 -> loc ~env lexbuf BAR
    | 52 -> loc ~env lexbuf BARBAR
    | 53 -> loc ~env lexbuf PLUS
    | 54 -> loc ~env lexbuf MINUS
    | 55 -> loc ~env lexbuf QUESTION
    | 56 -> loc ~env lexbuf EXCLAMATION
    | 57 -> loc ~env lexbuf DOTDOT
    | 58 -> loc ~env lexbuf RANGE_INCLUSIVE
    | 59 -> loc ~env lexbuf RANGE_EXCLUSIVE
    | 60 -> loc ~env lexbuf ELLIPSIS
    | 61 -> loc ~env lexbuf (AUGMENTED_ASSIGNMENT (String.sub (lexeme b) 0 1))
    | 62 -> loc ~env lexbuf PIPE
    | 63 ->
        let loca = make_pos ~env (Lexing.lexeme_end b) in
        add_token ~env EOF loca loca;
        has_work := false
    | 64 ->
        let head = Lexing.current_code_point b in
        if is_common_ascii head || Unicode.is_valid_unicode_codepoint head then (
          let buf = Buffer.create 10 in
          Buffer.add_utf_8_uchar buf (Uchar.of_int head);
          lex_unicode_ident b buf;
          let raw = Buffer.contents buf in
          loc ~env lexbuf
            (match Keyword_tbl.find_opt raw with
            | Some x -> x
            | None ->
                if Keyword_tbl.is_reserved raw then
                  add_lexing_warning ~env lexbuf (Warnings.Reserved_keyword raw);
                if 'A' <= raw.[0] && raw.[0] <= 'Z' then UIDENT raw
                else if Lexing.peek_next_int b = Char.code '~' then (
                  ignore (Lexing.__private__next_int b);
                  POST_LABEL raw)
                else LIDENT raw))
        else
          let error = Illegal_character (Lexing.current_code_point b) in
          add_lexing_error ~env lexbuf error
    | _ -> assert false
  done;
  (match env.docstrings with
  | None -> ()
  | Some c ->
      (if not (Vec.is_empty c) then
         let last = Vec.last c in
         Vec.set_last c (List.rev last));
      Vec.reverse_in_place c);
  env.vec

let preserve_comment env lexbuf =
  match env.Lex_env.docstrings with
  | Some c when env.comment ->
      fun (cmt : Comment.t) ->
        if String.length cmt.content > 2 && cmt.content.![2] = '/' then
          let loca = Lexing.lexeme_start lexbuf in
          let locb = Lexing.lexeme_end lexbuf in
          let l = Loc.of_menhir (make_pos ~env loca, make_pos ~env locb) in
          if Vec.is_empty c then Vec.push c [ (l, cmt) ]
          else
            let last = Vec.last c in
            if Loc.line_number l - Loc.line_number (fst (List.hd last)) > 1 then (
              Vec.set_last c (List.rev last);
              Vec.push c [ (l, cmt) ])
            else Vec.set_last c ((l, cmt) :: last)
  | _ -> ignore

let tokens_of_segment ~diagnostics ~comment ?docstrings
    (segment : Text_segment.t) =
  let lexbuf =
    Lexing.from_int_vec (Basic_utf8.from_string segment.text_segment_code)
  in
  let vec = Vec.make 100 ~dummy:Token_triple.null in
  let env : Lex_env.t =
    {
      diagnostics;
      docstrings;
      comment;
      name = segment.text_name;
      vec;
      current_line = segment.text_start_line;
      current_bol = 0;
      start_cnum = 0;
      last_unhandled_comment = ref None;
      asi_context = Semi_insertion.make_asi_context ();
      is_interpolation = false;
    }
  in
  main ~env ~preserve_comment:(preserve_comment env lexbuf) lexbuf

let tokens_of_string ?(name = "") ?(start_pos = Basic_lexing.dummy_pos)
    ?(is_interpolation = false) ?docstrings ~diagnostics ~comment s =
  let lexbuf = Lexing.from_int_vec (Basic_utf8.from_string s) in
  let vec = Vec.make 100 ~dummy:Token_triple.null in
  let start_lnum, start_bol, start_cnum =
    if Basic_prelude.phys_equal Basic_lexing.dummy_pos start_pos then (1, 0, 0)
    else (start_pos.pos_lnum, start_pos.pos_bol, start_pos.pos_cnum)
  in
  let env : Lex_env.t =
    {
      diagnostics;
      docstrings;
      comment;
      name;
      vec;
      current_line = start_lnum;
      current_bol = start_bol;
      start_cnum;
      last_unhandled_comment = ref None;
      asi_context = Semi_insertion.make_asi_context ();
      is_interpolation;
    }
  in
  main ~env ~preserve_comment:(preserve_comment env lexbuf) lexbuf
